#include<iostream>
#include<queue>
#include<stack>

using namespace std;

bool isPopOrder(int *pushData,int *popData, int length){
    if ( pushData == nullptr || popData == nullptr || length <= 0 )
        return false;

    stack<int> pushStack;
 	int index = 0;
    for ( int i=0; i< length; i++ ){
        pushStack.push(*(pushData+i));
        // 判断栈顶元素是否和出栈的首元素相等
        // 指针容易跑出界，增加条件
        while ( !pushStack.empty() && (pushStack.top() == popData[index]) ){
            // 栈： 该元素出栈
            pushStack.pop();
	        index ++;
        }
        
    }

    // 栈为空则返回true
    return pushStack.empty();
}

int main(void){
    
    int pushData[] = {1,2,3,4,5};
    // 正确的出栈顺序
    int popData[] = {4,5,3,2,1};

    // 错误的出栈顺序
    int popData[] = {5,3,2,1,4};

    // nullptr
    int pushData[] = {};
    int popData[] = {};
    cout << isPopOrder(pushData, popData, sizeof(pushData)/sizeof(int)) << endl;
    return 0;
}